package com.company;
// JMM 指令重排序

public class C10JMMOrderly {
//    private static boolean run=true;
private volatile static boolean run=true;
// volatile:可见性 ，每次读取都从主存中读取; 防止指令重排序
// 一个线程对一个volatile变量的修改，对于另一个线程的可见性
// 不保正原子性操作。
// Synchronized 修饰的语句块既可以保证代码块的原子性，也同时保证代码块变量的可见性。缺点是synchronized是属于重量级的操作，性能相对较低。

    int num=0;
//    boolean ready=false;
    volatile   boolean ready=false;
    public void actor1(I_Result r){
        if (ready) {
            r.r1 = num + num;
        }else{
            r.r1=1;
        }
    }
    public void actor2(I_Result r){
        num=2;//
        ready=true;
    }

    public static class I_Result{
        public static  int r1;
    }


}

